/**
 * 给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
 * 你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
 */

/**
 * 这类题解通常是六步走：
 * 1、n1 = curr.next
 * 2、n2 = curr.next.next
 * 3、curr.next = n2
 * 4、n1.next = n2.next
 * 5、n2.next = n1
 * 6、curr = n1
*/

var swapPairs = function (head) {
  let dummy = new ListNode();
  dummy.next = head;
  let curr = dummy;

  // 只要curr的下一个节点与下下一个节点不为空
  while (curr.next !== null && curr.next.next !== null) {
    let n1 = curr.next;
    let n2 = curr.next.next;
    curr.next = n2;
    n1.next = n2.next;
    n2.next = n1;
    curr = n1;
  }

  return dummy.next;
};
